Apache Flink-এ Transformations হলো ডেটা প্রক্রিয়াকরণের বিভিন্ন অপারেশন যা স্ট্রিম বা ব্যাচ ডেটা প্রসেস করতে ব্যবহৃত হয়। Flink API বিভিন্ন ধরনের ট্রান্সফরমেশন অফার করে, যেমন Map, Filter, FlatMap, KeyBy, এবং Window, যা ডেটা স্ট্রিমে প্রয়োজনীয় পরিবর্তন ও বিশ্লেষণ করতে ব্যবহৃত হয়।
১. Map Transformation
Map ফাংশন প্রতিটি ইনপুট রেকর্ডের উপর একটি অপারেশন প্রয়োগ করে এবং আউটপুট হিসেবে প্রতিটি ইনপুটের সাথে সম্পর্কিত একটি আউটপুট প্রদান করে।
কোড উদাহরণ:
DataStream<Integer> numbers = env.fromElements(1, 2, 3, 4, 5);
DataStream<Integer> squaredNumbers = numbers.map(value -> value * value);
বর্ণনা: এখানে, প্রতিটি সংখ্যা স্কোয়ার করা হচ্ছে, যেমন: ১ → ১, ২ → ৪, ইত্যাদি।
২. Filter Transformation
Filter ট্রান্সফরমেশন একটি কন্ডিশন চেক করে এবং শুধুমাত্র সেই ইনপুট আইটেমগুলিকে আউটপুটে রাখে যা শর্তটি পূরণ করে।
কোড উদাহরণ:
DataStream<Integer> evenNumbers = numbers.filter(value -> value % 2 == 0);
বর্ণনা: উপরের উদাহরণে, শুধুমাত্র জোড় সংখ্যাগুলো ফিল্টার করা হচ্ছে।
৩. FlatMap Transformation
FlatMap একটি ট্রান্সফরমেশন যা প্রতিটি ইনপুট আইটেমের জন্য এক বা একাধিক আউটপুট প্রদান করতে পারে। এটি Map এবং Filter এর সংমিশ্রণ হিসেবে কাজ করে।
কোড উদাহরণ:
DataStream<String> sentences = env.fromElements("Apache Flink", "Big Data");
DataStream<String> words = sentences.flatMap((String sentence, Collector<String> out) -> {
for (String word : sentence.split(" ")) {
out.collect(word);
}
});
বর্ণনা: এখানে, প্রতিটি বাক্যকে শব্দে বিভক্ত করে পৃথক আউটপুট স্ট্রিম হিসেবে বের করা হচ্ছে।
৪. KeyBy Transformation
KeyBy ট্রান্সফরমেশন ইনপুট ডেটা স্ট্রিমকে একটি কী ফিল্ডের উপর ভিত্তি করে পার্টিশনে ভাগ করে। এটি গ্রুপিং বা অ্যাগ্রিগেশন অপারেশন করার জন্য ব্যবহৃত হয়।
কোড উদাহরণ:
DataStream<Tuple2<String, Integer>> items = env.fromElements(
new Tuple2<>("apple", 3),
new Tuple2<>("banana", 2),
new Tuple2<>("apple", 4)
);
KeyedStream<Tuple2<String, Integer>, String> keyedItems = items.keyBy(value -> value.f0);
বর্ণনা: এখানে, keyBy অপারেশনের মাধ্যমে একই আইটেম (যেমন, "apple") একই গ্রুপে রাখা হচ্ছে।
৫. Window Transformation
Window ট্রান্সফরমেশন ইনপুট স্ট্রিমকে উইন্ডোতে ভাগ করে দেয়, যা নির্দিষ্ট সময়কাল বা আইটেম সংখ্যা ভিত্তিক হতে পারে। এটি স্ট্রিম ডেটা প্রসেসিংয়ের জন্য খুব গুরুত্বপূর্ণ।
কোড উদাহরণ (Time Window):
DataStream<Tuple2<String, Integer>> windowedCounts = keyedItems
.timeWindow(Time.seconds(10))
.sum(1);
বর্ণনা: এখানে, ১০ সেকেন্ডের টাইম উইন্ডোতে প্রতিটি আইটেমের সংখ্যা যোগ করা হচ্ছে।
উপসংহার
Apache Flink-এ ট্রান্সফরমেশন ব্যবহার করে ডেটা স্ট্রিম প্রসেসিং অনেক সহজ এবং কার্যকর হয়। এগুলো মূলত ডেটা ফিল্টার, গ্রুপিং, এবং উইন্ডো-ভিত্তিক প্রক্রিয়াকরণে সাহায্য করে।
Read more